import school.*;

import java.util.*;

import static java.lang.Integer.parseInt;

/**
 * 文件实现三个功能：通过collection.sort()方法，
 * 对Integer泛型的List进行排序；
 * 对String泛型的List进行排序；
 * 对其他类型泛型的List进行排序，以student为例。
 */
public class CollectionTest {
    /**
     * 对Integer泛型List排序
     * 创建一个Integer类型的List,插入十个100以内的不重复随机数
     * 调用collection.sort()方法对齐排序
     */
    public void testSort1() {
        List<Integer> integersList = new ArrayList<Integer>();
        Random random = new Random();
        Integer k;
        for (int i = 0; i < 10; i++) {
            do {
                k = random.nextInt(100);
            } while (integersList.contains(k));
            integersList.add(k);
            System.out.println("成功添加整数：" + k);
        }
        System.out.println("———————排序前———————");
        for (Integer integer : integersList) {
            System.out.println("元素：" + integer);
        }
        System.out.println("———————排序后———————");
        Collections.sort(integersList);
        for (Integer integer : integersList) {
            System.out.println("元素：" + integer);
        }

    }

    /**
     * 对String泛型List排序
     * 创建一个String类型的List,添加三个乱序的String元素
     * 调用collection.sort()方法，再次输出排序后的顺序
     */
    public void testSort2() {
        List<String> stringList = new ArrayList<String>();
        stringList.add("microslft");
        stringList.add("goole");
        stringList.add("lenovo");
        System.out.println("——————排序前——————");
        for (String string : stringList) {
            System.out.println("元素：" + string);
        }
        Collections.sort(stringList);
        System.out.println("——————排序后——————");
        for (String string : stringList) {
            System.out.println("元素：" + string);
        }

    }

    /**
     * 对String泛型List排序
     * 随机产生10个字符串，且每个字符串长度为10以内的随机整数
     * 每条字符串的每个字符都是随机的，可以重复，每条字符串不能重复
     */
    public void testSort3() {
        List<String> stringListAuto = new ArrayList<String>();
        //生成字符串
        String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";

        for (int j = 0; j < 10; j++) {
            String s=null;
            do {
                Random random = new Random();
                //随机产生字符串长度,nextInt(10)产生0--9之间的数字
                int k = random.nextInt(10)+1;

                StringBuffer sb = new StringBuffer();
                for (int i = 0; i < k; i++) {
                    int c = random.nextInt(62);
                    sb.append(str.charAt(c));
                }
                s = sb.toString();

            } while (stringListAuto.contains(s));
            stringListAuto.add(s);
        }
        System.out.println("————————排序前——————————");
        for (String string : stringListAuto) {
            System.out.println("字符串：" + string);
        }

        System.out.println("————————排序后——————————");
        Collections.sort(stringListAuto);
        for (String string : stringListAuto) {
            System.out.println("字符串：" + string);
        }

    }
    /**
     * 对其他类型的泛型List排序,以Student为例
     * Collections工具类中的sort方法，有两种：comparable()和comparator()
     * comparable 默认的比较规则，comparator临时的比较规则
     */
    public void testSort4(){
        List<Student> studentListTest=new ArrayList<Student>();
        Random r=new Random();
        studentListTest.add(new Student(r.nextInt(1000)+"","anqi"));
        studentListTest.add(new Student(r.nextInt(1000)+"","linc"));
        studentListTest.add(new Student(r.nextInt(1000)+"","akgj"));
        studentListTest.add(new Student(10000+"","akgj"));
        System.out.println("——————排序前——————");
        for (Student student:studentListTest){
            System.out.println("学生："+student.getId()+","+student.getame());
        }
        Collections.sort(studentListTest);
        System.out.println("——————根据id排序后——————");
        for (Student student:studentListTest){
            System.out.println("学生："+student.getId()+","+student.getame());
        }
        //Comparator方法的使用，调用重载的Comparator方法
        Collections.sort(studentListTest,new StudentComparator());
        System.out.println("——————根据姓名排序后——————");
        for (Student student:studentListTest){
            System.out.println("学生："+student.getId()+","+student.getame());
        }
    }


    /**
     * @param args
     */

    public static void main(String[] args) {
        CollectionTest ct = new CollectionTest();
//        ct.testSort1();
//        ct.testSort2();
//        ct.testSort3();
        ct.testSort4();
    }

}
